// PROGRAMA : ESTAA131 (ORIUNDO DO ESTPC131)
// BIBLIOTECA : SISP
// SISTEMA : INFORMACOES DE SEGURANCA PUBLICA - SISP
// CLIENTE : SESEC - SECRETARIA DE ESTADO DA SEGURAN�A CIDAD�
// PROGRAMADOR : * DATA: 24/04/2008
// OBJETIVO : CONSULTA/EMISSAO QUADRO ESTATISTICO DOS ATESTADOS
// DE ATECEDENTES(IDNTIFICACAO CIVIL E CRIMINAL)
package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.io.FileNotFoundException;
import java.text.ParseException;
import java.util.Arrays;

import net.sf.jasperreports.engine.JRException;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.controller.relatorios.Estte131Report;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Estaa131A;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Estcm001;
import br.com.vti.sisp_sicrim.antigo.model.SicEstatistica;
import br.com.vti.sisp_sicrim.antigo.model.SicTabelas;
import br.com.vti.sisp_sicrim.antigo.model.Sislac01;
import br.com.vti.sisp_sicrim.antigo.model.Sislct01;
import br.com.vti.sisp_sicrim.antigo.model.Sisll001;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Scrg001;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Estaa131 OBJETIVO : CONSULTA/EMISSAO QUADRO ESTATISTICO DOS ATESTADOS DE ATECEDENTES(IDNTIFICACAO CIVIL E CRIMINAL) *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/estaa131")
public class Estaa131 {
	// Views utilizadas
	SicEstatistica vwCadest = new SicEstatistica();
	SicTabelas vwTabele = new SicTabelas();
	// Telas/relatorios utilizados
	Estte131Report report;
	Estaa131A estaa131A;
	Estcm001 estcm001;
	// Includes utilizados
	Sislac01 sislac01 = new Sislac01();
	Sislct01 sislct01 = new Sislct01();
	// Sisldat8 sisldat8 = new Sisldat8();
	Sisll001 sisll001 = new Sisll001();
	// Areas globais / session
	Scrg001 scrg001;
	// Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais(); // Scrpp001 scrpp001 = new
	// Scrpp001 ();
	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	Estaa131 estaa131Anterior;
	String faseproc = "0";

	private int tempo = 0;
	private int k = 0;
	private int i = 0;
	// private String motida = "";
	private String motid2 = "";
	private String[] tabm = { "", "   ", "VEI", "CON", "MUL", "   ", "IPV", "ROU", "   ", "   ", "   ", "   ", "   ", "IDC", "ICR", "FUN", "   ", "   " };

	// MENSAGENS DO SISTEMA

	private Estaa131A preMapas() throws ParseException {
		int ind1, ind2;
		estaa131A = new Estaa131A(true, sessao);
		estcm001 = new Estcm001(true, sessao);
		for (ind1 = 1; ind1 <= 15; ind1++)
			estcm001.setMat0(ind1, 0);
		for (ind1 = 1; ind1 <= 7; ind1++) {
			for (ind2 = 1; ind1 <= 15; ind1++) {
				estcm001.setTra0(ind1, ind2, 0);
			}
		}
		for (ind1 = 1; ind1 <= 7; ind1++)
			estcm001.setTot0(ind1, 0);
		for (ind1 = 1; ind1 <= 100; ind1++)
			report.setMat1(ind1, 0);
		for (ind1 = 1; ind1 <= 2; ind1++)
			estaa131A.setConimp(ind1, "");
		for (ind1 = 1; ind1 <= 7; ind1++) {
			for (ind2 = 1; ind1 <= 100; ind1++) {
				report.setTra1(ind1, ind2, 0);
			}
		}
		Arrays.fill(tabm, "");
		sessao.getScrg001().setWProgramaw(this.getClass().getSimpleName());
		estaa131A.setDataCorrente(UtilBean.obtemDataCorrente());
		estaa131A.setDataCorrente(UtilBean.inverteDataCorrente());
		// Par�grafo: rp0()
		return estaa131A;
	}

	public Estaa131(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public void executar(Estaa131A estaa131A, Estcm001 estcm001) {
		try {
			main(estaa131A, estcm001);
		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			excp.sessao = sessao;
			excp.trataErroScrperro(e);
		}
	}

	private void main(Estaa131A pestaa131A, Estcm001 pestcm001) throws Exception {
		if (pestcm001 == null && pestaa131A == null) {
			primeiraVez = true;
			// estcm001 = new Estcm001 (primeiraVez);
			estaa131A = preMapas();
			estaa131A.setNavegar("../estaa131/executar");
			result.include("estaa131A", estaa131A);
			sessao.setAtributo("ESTAA131", this);
			estaa131A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		} else {
			restaurarEstados(pestaa131A, pestcm001);
			if (pestcm001 != null) {
				result.include("estaa131A", estaa131A);
				sessao.setAtributo("ESTAA131", this);
				estaa131A.enviarTela(false, result, getClass().getSimpleName().toUpperCase());
				return;
			}
		}

		if (estaa131A.getOperacao().equals("CAD")) {
			Scrpp001 scrpp001 = new Scrpp001(result, sessao);
			scrpp001.executar(null);
			return;
		}
		if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
			Scrpp001 scrpp001 = new Scrpp001(result, sessao);
			scrpp001.executar(null);
			return;
		}
		// DEFINE PRINTER(BUC = 1)
		for (int i1 = 1; i1 <= 7; i1++) {
			estcm001.setTot0(i1, 0);
		}

		if (pestaa131A != null) {
			estaa131A.receberTela(false, result);
		}

		if (estaa131A.getOperacao().equals("CAD")) {
			Scrpp001 scrpp001 = new Scrpp001(result, sessao);
			scrpp001.executar(null);
			return;
		}
		if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
			Scrpp001 scrpp001 = new Scrpp001(result, sessao);
			scrpp001.executar(null);
			return;
		}
		if (!UtilBean.funcao.equals(UtilBean.ctt_processa)) {
			estaa131A.enviarMensagem(null, "");
			return;
		}
		if (UtilBean.validarMascara(estaa131A.getDatini(), "yyyyMMdd")) {
			estaa131A.enviarMensagem("operacao", "");
			return;
		}
		if (estaa131A.getAdt() < 1992) {
			estaa131A.enviarMensagem("adt", "");
			return;
		}
		if (UtilBean.validarMascara(estaa131A.getDatfim(), "yyyyMMdd")) {
			estaa131A.enviarMensagem("adt", "");
			return;
		}
		if (estaa131A.getAfi() < 1992) {
			estaa131A.enviarMensagem("afi", "");
			return;
		}
		if (estaa131A.getDatini() > estaa131A.getDatfim()) {
			estaa131A.enviarMensagem("adt", "");
			return;
		}

		tempo = estaa131A.getDatfim() - estaa131A.getDatini();

		estaa131A.setMotida(UtilBean.moveSubstring(estaa131A.getMotida(), 0, 3, "A", tabm[13]));
		estaa131A.setMotida(UtilBean.moveSubstring(estaa131A.getMotida(), 3, 2, "N", 97));
		estaa131A.setMotida(UtilBean.moveSubstring(estaa131A.getMotida(), 5, 8, "N", estaa131A.getDatini()));
		motid2 = estaa131A.getMotida();

		motid2 = UtilBean.moveSubstring(motid2, 5, 8, "N", estaa131A.getDatfim());
		if (UtilBean.validaSelecao(estaa131A.getConimp()))
		// PERFORM TABSSUP2
		{
			estaa131A.enviarMensagem("jMatriculaj", "");
			return;
		}
		estcm001.setDtini(estaa131A.getDatini());
		estcm001.setDtini((int) funcoes.sissd002(estcm001.getDtini()));
		estcm001.setDtfim(estaa131A.getDatfim());
		estcm001.setDtfim((int) funcoes.sissd002(estcm001.getDtfim()));
		k = 1;
		estcm001.setMensagem("");
		if (!estaa131A.getConimp(2).trim().equals("")) {
			if (!relatorio()) {
				sessao.setAtributo("ESTAA131", this);
				result.include("estaa131A", estaa131A);
				estcm001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}
		} else {
			if (estaa131A.getMat() > 0) {
				sislct01.tt1 = 18;
				sislct01.cc1 = estaa131A.getMat();
				sislct01.vt1 = funcoes.sisnct01(sislct01.tt1, sislct01.cc1, sislct01.vt1);
				if (sislct01.vt1.equals("@")) {
					estaa131A.setMensagemSaida(" REGISTRO NAO ENCONTRADO");
					sessao.setAtributo("ESTAA131", this);
					result.include("estaa131A", estaa131A);
					estcm001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
					return;
				}
				soma();
				tela();
				sessao.setAtributo("ESTAA131", this);
				result.include("estcm001", estcm001);
				estcm001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				inicializa();
				return;
			}
			while (vwTabele.pesquisaCodigoTabela(18)) {
				if (vwTabele.fimDados()) {
					tela();
				}
				sislac01.niveis = vwTabele.getDescricaoElem();
				if (!(UtilBean.subStr(sislac01.niveis, 30 + 14 - 1, 1).compareTo("0") > 0)) {
					continue;
				}

				estaa131A.setMat(vwTabele.getCodigoElem());
				soma();
			}
			sessao.setAtributo("ESTAA131", this);
			result.include("estaa131A", estaa131A);
			estcm001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
		}
	}

	private boolean soma() {
		while (vwCadest.pesquisaMotidaFaixa(tabm[13], 97, (int) estaa131A.getMat(), estaa131A.getDatini(), estaa131A.getDatfim())) {
			// 276
			// estaa131A.enviarReceberTela(false, result);
			if (estaa131A.getMat() > 0) {
				if (!(vwCadest.getMatriculaFunc() == estaa131A.getMat())) {
					continue;
				}
			}
			if (estcm001.getMat0(k) != vwCadest.getMatriculaFunc()) {
				if (estcm001.getMat0(k) == 0) {

					estcm001.setMat0(k, vwCadest.getMatriculaFunc());
				} else {
					k += 1;

					estcm001.setMat0(k, vwCadest.getMatriculaFunc());
				}
			}
			for (i = 1; i <= 6; i++) {

				estcm001.setTra0(i, k, (int) (estcm001.getTra0(i, k) + vwCadest.getQuantTrans(i)));
				estcm001.setTra0(7, k, (int) (estcm001.getTra0(7, k) + vwCadest.getQuantTrans(i)));
				estcm001.setTot0(i, (int) (estcm001.getTot0(i) + vwCadest.getQuantTrans(i)));
				estcm001.setTot0(7, (int) (estcm001.getTot0(7) + vwCadest.getQuantTrans(i)));
			}
			// if (k == 15) {
			// tela();
			// }
		}
		if (vwCadest.registrosProcessados() == 0) {
			estaa131A.setMensagemSaida("INTERVALO INEXISTENTE");
			return false;
		}
		return true;
	}

	private void tela() {
		estcm001.setMensagemSaida("CONSULTA EFETUADA OK");

		estcm001.receberTela(false, result);
		for (int i1 = 1; i1 <= 7; i1++) {
			for (int i2 = 1; i2 <= 15; i1++) {
				estcm001.setTra0(i1, i2, 0);
			}
		}
		for (int i1 = 1; i1 <= 15; i1++) {
			estcm001.setMat0(i1, 0);
		}
		estaa131A.setMotida(UtilBean.moveSubstring(estaa131A.getMotida(), 13, 7, "N", 0));
		// jMatriculaj = 0;
		// datini = 0;
		// datfim = 0;
		for (int i1 = 1; i1 <= 2; i1++) {
			estaa131A.setConimp(i1, "");
		}
		k = 1;
	}

	private boolean relatorio() throws ParseException, JRException, FileNotFoundException {
		if (estaa131A.getMat() > 0) {
			sislct01.tt1 = 18;
			sislct01.cc1 = estaa131A.getMat();

			sislct01.vt1 = funcoes.sisnct01(sislct01.tt1, sislct01.cc1, sislct01.vt1);
			if (sislct01.vt1.equals("@")) {
				estaa131A.setMensagemSaida(" REGISTRO NAO ENCONTRADO");
				return false;
			}
			report.setHoraCorrente(estcm001.getHoraCorrente());
			mais();
			impr();
			inicializa();
			return true;
		}
		while (vwTabele.pesquisaCodigoTabela(18)) {
			if (vwTabele.fimDados()) {
				impr();
			}
			sislac01.niveis = vwTabele.getDescricaoElem();
			if (!(UtilBean.subStr(sislac01.niveis, 30 + 14 - 1, 1).compareTo("0") > 0)) {
				continue;
			}

			estaa131A.setMat(vwTabele.getCodigoElem());
			mais();

		}
		return true;
	}

	private void mais() throws ParseException {
		while (vwCadest.pesquisaMotidaFaixa(tabm[13], 97, (int) estaa131A.getMat(), estaa131A.getDatini(), estaa131A.getDatfim())) {

			// estaa131A.enviarReceberTela(false, result);
			if (estaa131A.getMat() > 0) {
				if (!(vwCadest.getMatriculaFunc() == estaa131A.getMat())) {
					continue;
				}
			}

			if (report.getMat1(k) != vwCadest.getMatriculaFunc()) {
				if (report.getMat1(k) == 0) {
					report.setMat1(k, vwCadest.getMatriculaFunc());
				} else {
					k += 1;
					report.setMat1(k, vwCadest.getMatriculaFunc());
				}
			}
			for (i = 1; i <= 6; i++) {

				report.setTra1(i, k, (int) (report.getTra1(i, k) + vwCadest.getQuantTrans(i)));
				report.setTra1(7, k, (int) (report.getTra1(7, k) + vwCadest.getQuantTrans(i)));
				estcm001.setTot0(i, (int) (estcm001.getTot0(i) + vwCadest.getQuantTrans(i)));
				estcm001.setTot0(7, (int) (estcm001.getTot0(7) + vwCadest.getQuantTrans(i)));
			}

		}
		if (vwCadest.registrosProcessados() == 0) {
			estaa131A.setMensagemSaida("INTERVALO INEXISTENTE");
		}
	}

	private void impr() throws ParseException, JRException, FileNotFoundException {
		estaa131A.setMensagemSaida("EMISSAO EFETUADA OK");
		// RELATORIO
		report = new Estte131Report();
		report.gravaRelatorio(1);
		report.imprimir();
		// RELATORIO
		for (int i1 = 1; i1 <= 100; i1++) {
			estcm001.setMat0(i1, 0);
		}
		for (int i1 = 1; i1 <= 7; i1++) {
			for (int i2 = 1; i2 <= 100; i1++) {
				report.setTra1(i1, i2, 0);
			}
		}
		for (int i1 = 1; i1 <= 7; i1++) {
			estcm001.setTot0(i1, 0);
		}
		estaa131A.setMotida(UtilBean.moveSubstring(estaa131A.getMotida(), 13, 7, "N", 0));
		// jMatriculaj = 0;
		// datini = 0;
		// datfim = 0;
		for (int i1 = 1; i1 <= 2; i1++) {
			estaa131A.setConimp(i1, "");
		}
	}

	private void restaurarEstados(Estaa131A pestaa131A, Estcm001 pestcm001) {
		this.estaa131Anterior = (Estaa131) sessao.getAtributo("ESTAA131");
		if (pestaa131A != null) {
			estaa131A = pestaa131A;
		} else {
			estaa131A = this.estaa131Anterior.estaa131A;
		}
		estaa131A.setSessao(sessao);
		if (pestcm001 != null) {
			estcm001 = pestcm001;
		} else {
			estcm001 = this.estaa131Anterior.estcm001;
		}
		estcm001.setSessao(sessao);
		this.faseproc = this.estaa131Anterior.faseproc;
	}

	private void inicializa() throws ParseException {
		for (int i1 = 1; i1 <= 7; i1++) {
			for (int i2 = 1; i2 <= 15; i1++) {
				estcm001.setTra0(i1, i2, 0);
			}
		}
		for (int i1 = 1; i1 <= 15; i1++) {
			estcm001.setMat0(i1, 0);
		}
		k = 0;
		estaa131A.setMotida(UtilBean.moveSubstring(estaa131A.getMotida(), 13, 7, "N", 0));
		for (int i1 = 1; i1 <= 2; i1++) {
			estaa131A.setConimp(i1, "");
		}
		for (int i1 = 1; i1 <= 7; i1++) {
			for (int i2 = 1; i2 <= 100; i1++) {
				report.setTra1(i1, i2, 0);
			}
		}
		for (int i1 = 1; i1 <= 7; i1++) {
			estcm001.setTot0(i1, 0);
		}

	}
}
